Add build script rerun-if-changed dependencies
authorRaph Levien <raph@google.com>
Thu, 26 Jan 2017 21:43:13 +0000 (13:43 -0800)
committerRaph Levien <raph@google.com>
Thu, 26 Jan 2017 21:43:13 +0000 (13:43 -0800)
Also pick up the rerun-if-changed dependencies from build scripts.

src/cargo/ops/cargo_rustc/output_depinfo.rs

index 5ed98eb11599548678f635d584da3b7e908396b3..188956187a89f5f99b5e41472bf21e8788893275 100644 (file)
@@ -27,6 +27,7 @@ fn add_deps_for_unit<'a, 'b>(deps: &mut HashSet<PathBuf>, context: &mut Context<
     }
     visited.insert(unit.clone());
 
+    // Add dependencies from rustc dep-info output (stored in fingerprint directory)
     let dep_info_loc = fingerprint::dep_info_loc(context, unit);
     if let Some(paths) = fingerprint::parse_dep_info(&dep_info_loc)? {
         for path in paths {
@@ -34,7 +35,15 @@ fn add_deps_for_unit<'a, 'b>(deps: &mut HashSet<PathBuf>, context: &mut Context<
         }
     }
 
-    // recursively traverse all transitive dependencies
+    // Add rerun-if-changed dependencies
+    let key = (unit.pkg.package_id().clone(), unit.kind);
+    if let Some(output) = context.build_state.outputs.lock().unwrap().get(&key) {
+        for path in &output.rerun_if_changed {
+            deps.insert(path.into());
+        }
+    }
+
+    // Recursively traverse all transitive dependencies
     for dep_unit in &context.dep_targets(unit)? {
         let source_id = dep_unit.pkg.package_id().source_id();
         if source_id.is_path() {